package stringtools

import (
	"strings"
	"unicode"
)

const Values = "Go is an open source programming language that makes it easy to build simple, reliable, and efficient software."

// 判断一个子字符串是否存在于常量字符串 Values 中。
func StringsContains(subStrings string) bool {
	return strings.Contains(Values, subStrings)
}

// 比较两个字符串的大小，返回一个整数值。
// 如果第一个字符串小于第二个字符串，返回负数；如果两个字符串相等，返回 0；
// 如果第一个字符串大于第二个字符串，返回正数。
func StringsCompare(values string, subString string) int {
	return strings.Compare(values, subString)
}

// 将一个字符串转换为大写字母形式。
func StringsToUpper(subStrings string) string {
	return strings.ToUpper(subStrings)
}

// 将一个字符串转换为小写字母形式。
func StringsToLower(subStrings string) string {
	return strings.ToLower(subStrings)
}

// 将一个字符串转换为标题格式，即每个单词的首字母大写，其他字母小写。
func StringsToTitle(subStrings string) string {
	// 使用 FieldsFunc 将字符串按照空格分割成单词切片
	words := strings.FieldsFunc(subStrings, unicode.IsSpace)

	// 遍历单词切片，将每个单词的首字母大写
	for i, word := range words {
		words[i] = strings.Title(word)
	}

	// 使用 Join 将单词切片按照空格连接起来
	return strings.Join(words, " ")
}

var UpperCase = map[string]string{
	"a": "A",
	"b": "B",
}

var LowerCase = map[string]string{
	"A": "a",
	"B": "b",
}

// 统计一个子字符串在常量字符串 Values 中出现的次数。
func StringsCount(subStrings string) int {
	return strings.Count(Values, subStrings)
}

// 将常量字符串 Values 按照给定的分隔符 split 进行拆分，返回一个字符串切片。
func StringsSplit(split string) []string {
	return strings.Split(Values, split)
}

// 将一个字符串切片 subStrings 中的字符串按照空格连接起来，返回一个新的字符串。
func StringsJoin(subStrings []string) string {
	return strings.Join(subStrings, " ")
}

// 返回子字符串在常量字符串 Values 中第一次出现的索引位置，如果找不到则返回 -1。
func StringsIndex(subStrings string) int {
	return strings.Index(Values, subStrings)
}

// 判断常量字符串 Values 是否以子字符串 subStrings 开头。
func StringsHasPrefix(subStrings string) bool {
	return strings.HasPrefix(Values, subStrings)
}

// 判断常量字符串 Values 是否以子字符串 subStrings 结尾。
func StringsHasSuffix(subStrings string) bool {
	return strings.HasSuffix(Values, subStrings)
}

// 去除字符串 values 的前后空白字符。
func StringsTrim(values string) string {
	return strings.TrimSpace(values)
}

// 使用 strings.NewReplacer() 创建一个新的替换器，将字符串 values 中的换行符、制表符和空格替换为空。返回替换后的新字符串。
func StringsReplacer(values string) string {
	newReplacer := strings.NewReplacer("\n", "", "\t", "", " ", "")
	return newReplacer.Replace(values)
}
